package com.zjcloud.jwgl.mapper;

import java.util.List;
import com.zjcloud.jwgl.domain.AcScheduleAlgorithmConfig;

/**
 * 排课算法配置Mapper接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface AcScheduleAlgorithmConfigMapper 
{
    /**
     * 查询排课算法配置
     * 
     * @param id 排课算法配置主键
     * @return 排课算法配置
     */
    public AcScheduleAlgorithmConfig selectAcScheduleAlgorithmConfigById(Long id);

    /**
     * 查询排课算法配置列表
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 排课算法配置集合
     */
    public List<AcScheduleAlgorithmConfig> selectAcScheduleAlgorithmConfigList(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 新增排课算法配置
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 结果
     */
    public int insertAcScheduleAlgorithmConfig(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 修改排课算法配置
     * 
     * @param acScheduleAlgorithmConfig 排课算法配置
     * @return 结果
     */
    public int updateAcScheduleAlgorithmConfig(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 删除排课算法配置
     * 
     * @param id 排课算法配置主键
     * @return 结果
     */
    public int deleteAcScheduleAlgorithmConfigById(Long id);

    /**
     * 批量删除排课算法配置
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAcScheduleAlgorithmConfigByIds(Long[] ids);

    /**
     * 查询默认算法配置
     * 
     * @return 默认配置
     */
    public AcScheduleAlgorithmConfig selectDefaultConfig();

    /**
     * 根据算法类型查询配置列表
     * 
     * @param algorithmType 算法类型
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByAlgorithmType(String algorithmType);

    /**
     * 根据配置名称查询配置
     * 
     * @param configName 配置名称
     * @return 配置信息
     */
    public AcScheduleAlgorithmConfig selectConfigByName(String configName);

    /**
     * 设置默认配置
     * 
     * @param id 配置ID
     * @return 结果
     */
    public int setDefaultConfig(Long id);

    /**
     * 清除所有默认配置标记
     * 
     * @return 结果
     */
    public int clearDefaultConfig();
    
    /**
     * 取消默认配置
     * 
     * @param id 配置ID
     * @return 结果
     */
    public int cancelDefaultConfig(Long id);

    /**
     * 查询启用的配置列表
     * 
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectEnabledConfigList();

    /**
     * 根据算法类型ID查询配置列表
     * 
     * @param algorithmTypeId 算法类型ID
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByAlgorithmTypeId(Long algorithmTypeId);

    /**
     * 根据模板ID查询配置列表
     * 
     * @param templateId 模板ID
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByTemplateId(Long templateId);

    /**
     * 根据优化策略查询配置列表
     * 
     * @param optimizationStrategy 优化策略
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByOptimizationStrategy(String optimizationStrategy);

    /**
     * 查询高性能配置列表（根据平均评分排序）
     * 
     * @param limit 限制数量
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectTopPerformanceConfigs(int limit);

    /**
     * 查询最近使用的配置列表
     * 
     * @param limit 限制数量
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectRecentlyUsedConfigs(int limit);

    /**
     * 更新配置使用统计
     * 
     * @param acScheduleAlgorithmConfig 配置信息
     * @return 结果
     */
    public int updateUsageStatistics(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);

    /**
     * 增加使用次数
     * 
     * @param id 配置ID
     * @return 结果
     */
    public int incrementUsageCount(Long id);

    /**
     * 增加成功次数
     * 
     * @param id 配置ID
     * @return 结果
     */
    public int incrementSuccessCount(Long id);

    /**
     * 更新最后使用时间
     * 
     * @param id 配置ID
     * @return 结果
     */
    public int updateLastUsedTime(Long id);

    /**
     * 根据配置版本查询配置
     * 
     * @param version 配置版本
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigsByVersion(String version);

    /**
     * 查询配置的关联信息（包含算法类型和参数模板）
     * 
     * @param id 配置ID
     * @return 配置信息
     */
    public AcScheduleAlgorithmConfig selectConfigWithRelations(Long id);

    /**
     * 批量查询配置的关联信息
     * 
     * @param acScheduleAlgorithmConfig 查询条件
     * @return 配置列表
     */
    public List<AcScheduleAlgorithmConfig> selectConfigListWithRelations(AcScheduleAlgorithmConfig acScheduleAlgorithmConfig);
}